<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 定义 0.5 秒后一个成功的 Promise 对象
        const p1 = new Promise(function (resolve, reject) {
            setTimeout(() => resolve("p1 ok"), 500)
        });
        // 定义 1 秒后一个成功的 Promise 对象
        const p2 = new Promise(function (resolve, reject) {
            setTimeout(() => resolve("p2 ok"), 1000)
        });
        // 定义 1.5 秒后一个失败的 Promise 对象
        const p3 = new Promise(function (resolve, reject) {
            setTimeout(() => reject(new Error('p3 error')), 1500)
        });
        // all 方法同时执行 p1 和 p2，并在它们都完成后执行
        Promise.all([p1, p2])
        .then(results => console.log("all results:", results))
        .catch(error => console.error("all error:", error))
        .finally(results => console.log("all finally:", results));
        // race 方法同时执行 p1、p2、p3，但只保留先完成的 Promise 对象的结果
        Promise.race([p1, p2, p3])
        .then(results => console.log("race results:",results))
        .catch(error => console.error("race error:",error))
        .finally(results => console.log("race finally:",results));
    </script>
</head>
<body>
    
</body>
</html>